package com.hskj.springboot.listener;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;

@Configuration
public class RabbitMQListener {

    @RabbitListener(queues = "delay_queue",ackMode = "MANUAL")
    public void myListener1(Message message, Channel channel) throws IOException {
        //获取签收的标签
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        //接收转换消息
        try {
            String messagestr = new String(message.getBody());
            System.out.println("messagestr = " + messagestr);

//            System.out.println(2/0);

            //手动签收消息
            /**
             * 第一个参数：表示收到的标签
             * 第二个参数：如果为true表示可以签收所有的消息
             */
            channel.basicAck(deliveryTag,true);
        } catch (Exception e) {
            //拒绝签收
            /*
            第三个参数requeue：重回队列。如果设置为true，则消息重新回到queue，broker会重新发送该消息给消费端
             */
            channel.basicNack(deliveryTag,true,true);
        }
    }
}
